package codegen;

import picocli.CommandLine;
import java.util.Scanner;
import java.util.concurrent.Callable;

/**
 * 代码生成器主程序
 * 提供交互式界面，让用户选择要使用的生成器类型
 */
@CommandLine.Command(
    name = "代码生成器",
    mixinStandardHelpOptions = true,
    version = "1.0"
)
public class Example implements Callable<Integer> {
    public static void main(String[] args) {
        int exitCode = new CommandLine(new Example()).execute(args);
        System.exit(exitCode);
    }

    @Override
    public Integer call() throws Exception {
        CodeGenerator generator = new CodeGenerator();
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("\n=== 代码生成器制作工具 ===\n");
            System.out.println("请选择要制作的生成器类型：");
            System.out.println("1. 实体类生成器");
            System.out.println("2. 模板生成器");
            System.out.println("3. JSON示例生成器");
            System.out.println("4. 自定义生成器");
            System.out.println("5. Spring Boot代码生成器");
            System.out.println("6. 退出程序");

            System.out.print("\n请输入选项 (1-6): ");
            int choice = scanner.nextInt();
            scanner.nextLine(); // 消费换行符

            if (choice == 6) {
                break;
            }

            try {
                switch (choice) {
                    case 1:
                        // 制作实体类生成器
                        generator.createEntityGenerator();
                        break;
                    case 2:
                        // 制作模板生成器
                        generator.createTemplateGenerator();
                        break;
                    case 3:
                        // 制作JSON示例生成器
                        generator.createJsonExampleGenerator();
                        break;
                    case 4:
                        // 制作自定义生成器
                        generator.createCustomGenerator();
                        break;
                    case 5:
                        // 制作Spring Boot代码生成器
                        generator.createConfigGenerator();
                        break;
                }

                System.out.print("\n是否继续使用？(y/n): ");
                if (!scanner.nextLine().trim().equalsIgnoreCase("y")) {
                    break;
                }
            } catch (Exception e) {
                System.out.println("发生错误：" + e.getMessage());
                e.printStackTrace();
            }
        }

        scanner.close();
        return 0;
    }
}
